(define (good-enough? guess x)
  (< (abs (- (square guess) x)) 0.001))

(define (improve guess x)
  (average (/ x guess) guess))

(define (average x y)
  (/ (+ x y) 2))

(define (square x) (* x x))

(define (other-sqrt-iter guess x)
  (new-if (good-enough? guess x)
    guess
    (other-sqrt-iter (improve guess x) x)))

(define (new-if predicate then-block else-block)
  (cond (predicate then-block)
	(else else-block)))

(define (my-other-sqrt x)
  (other-sqrt-iter 1.0 x))

; Explanation

(my-other-sqrt 9)
(other-sqrt-iter 1.0 9)
(new-if (good-enough? 1.0 9)
	1.0
	(other-sqrt-iter (improve 1.0 9) 9))
(cond ((< (abs (- (square 1.0) 9)) 0.001) 1.0)
      (else (cond ((< ( abs (- (square (improve 1.0 9) 9))) 0.001))
		  (else (cond ...))))) ; recursion
